<?php

/**
 * Utilsy dla użytkowników
 * @author Anna Rybka
 *
 */
class UserUtils {
	
	/**
	 * Metoda dodaje użytkownika do bazy
	 * @param $user użytkownik
	 * @return dodany obiekt użytkownika
	 */
	public static function add(User &$user) {
		$uid = Manager::getInstance ()->execute ( new UserAddCommand ( $user ) );
		if(VariableUtils::isNumber($uid)){
			$user->setId($uid);
			$user->setRole(UserRoles::USER_ROLE);
			return true;
		}
		return false;
	}
	
	/**
	 * Metoda usuwa użytkownika z bazy
	 * @param $user użytkownik
	 * @return flaga czy udało się usunąć
	 */
	public static function remove(User $user) {
		return self::removeById ( $user->getId () );
	}
	
	/**
	 * Metoda usuwa użytkownika o podanym identyfikatorze z bazy
	 * @param $userId identyfikator użytkownika
	 * @return flaga czy udało się usunąć
	 */
	public static function removeById($userId) {
		return Manager::getInstance ()->execute ( new UserDeleteCommand ( $userId ) );
	}
	
	/**
	 * Metoda modyfikuję użytkownika o tym samym identyfikatorze
	 * @param $user użytkownik
	 * @return flaga czy udało się zmodyfikować 
	 */
	public static function modify(User $user) {
		return Manager::getInstance ()->execute ( new UserModifyCommand ( $user ) );
	}
	
	/**
	 * Metoda ustawia role użytkownika
	 * @param $role rola
	 * @param $user użytkownik
	 * @return czy akcja się powiodła
	 */
	public static function setRole($role, User $user) {
		return UserUtils::setRoleById ( $role, $user->getId () );
	}
	
	/**
	 * Metoda ustawia role użytkownikowi o danym id
	 * @param $role rola
	 * @param $userId id użytkownika
	 * @return czy akcja się powiodła
	 */
	public static function setRoleById($role, $userId) {
		return Manager::getInstance ()->execute ( new UserChangeRoleCommand ( $userId, $role ) );
	}
	
	/**
	 * Metoda zwraca listę użytkowników spełniających kryteria wyszukiwania
	 * @param $controls kryteria wyszukiwania
	 * @return lista użytkowników spełniających kryteria wyszukiwania
	 */
	public static function find(UserSearchControls $controls) {
		return Manager::getInstance ()->execute ( new UserFindCommand ( $controls ) );
	}
	
	/**
	 * Metoda loguje użytkownika
	 * @param $login login użytkownika
	 * @param $password hasło użytkownika
	 * @return obiekt użytkownika z odpowiednią rolą 
	 */
	public static function login($login, $password) {
		return Manager::getInstance ()->execute ( new UserLoginCommand ( $login, $password ) );
	}
	
	/**
	 * Metoda pobiera użytkownika z danym identyfikatorem
	 */
	
	public static function get($id) {
		return Manager::getInstance()->execute (new UserGetCommand ($id) );
	}
}

?>